package main

import "fmt"

/*

==============================结构体声明==========================================
type 结构体名称 struct{
	field1 type
	field2 type
}

==============================创建结构体变量==========================================
1 - 直接声明
2 - {}
var p Person = Person{}
3 - &
var p *Person = new(Person)
4 - {}
var p *Person = &Person{}

第3钟和第4种方式返回的是结构体指针，结构体指针访问字段的标准方式应该是：（*结构体指针）.字段名，例如（*Person).Name = "tom",
go做了一个简化，也支持 结构体指针.字段名，例如 person.Name = "tom"， go编译器底层对 person.Name做了一个转化 （*person).name

结构体的所有字段在内存中都是连续的。



*/

type Person struct{
	Name string
	Age int
	Scores [5]float64
	ptr *int  //指针
	slice []int //切片
	cars map[string]string //map
}

func main() {
	/*var p1 Person
	fmt.Println(p1)

	p1.slice = make([]int, 10)
	p1.slice[0] = 100

	p1.cars = make(map[string]string)
	p1.cars["first"] = "Ferri"

	fmt.Println(p1)*/

	/*var p3 *Person = new(Person)*/
	var p3 *Person = &Person{}
	(*p3).Name = "JO"
	p3.Age = 30

	fmt.Println(*p3)
	fmt.Println(p3)

}
